#include <string.h>
#include "fonction.h"
#include "carte.h"

#include <QtCore/QVector>

#include <QtCore/QDebug>

#define KMAXVAL 4
#define KMAXJOUEURS 4
#define KMAXCHAR 20


TResultats calculPointsSansPouce(int bouts, int enchere, bool checkPoignee, int poignee, bool petit, int points, TResultats resultats, int pnbJoueurs)
{
    bool fait = false;

    // determination du resultat en fonction du nombre de bouts et du nombre de points du preneur
    switch (bouts) {

    case 1:
        if (points < 51) {
            points = 51 - points;
            fait = false;
        }
        else {
            points = points - 51;
            fait = true;
        }
        break;

    case 2:
        if (points < 41) {
            points = 41 - points;
            fait = false;
        }
        else {
            points = points - 41;
            fait = true;
        }
        break;

    case 3:
        if (points < 36) {
            points = 36 - points;
            fait = false;
        }
        else {
            points = points - 36;
            fait = true;
        }
        break;

    case 0:
        if (points < 56) {
            points = 56 - points;
            fait = false;
        }
        else {
            points = points - 56;
            fait = true;
        }
        break;
    }

    // ajout de la base de 25 points
    points = points + 25;

    // traitement des bonus
    // bonus poignee
    if(checkPoignee == true)
        switch (poignee) {

    case 1:
        points = points + 10;
        break;

    case 2:
        points = points + 20;
        break;

    case 3:
        points = points + 30;
        break;
    }
    // bonus petit au bout
    if (petit == true)
        points = points + 10;
    // affectation du facteur de l'enchère
    switch (enchere) {

    case 2:
        points = points*2;
        break;

    case 3:
        points = points*4;
        break;

    case 4:
        points = points*6;
        break;

    default:
        break;
    }

    // affectation des pour preneur et defense en fonction du resultat
    switch(pnbJoueurs) {

    case 3:
        affectation3(fait, points, resultats);
        break;

    case 4:
        affectation4(fait, points, resultats);
        break;

    case 5:
        affectation5(fait, points, resultats);
        break;
    }

    return resultats;
}

void affectation3(bool pfait, int ppoints, TResultats & presultats) {

    if(pfait == true) {
        presultats.resultatPreneur = ppoints*2;
        presultats.resultatDefense = -ppoints;
    }
    else {
        presultats.resultatPreneur = -ppoints*2;
        presultats.resultatDefense = ppoints;
    }
}

void affectation4(bool pfait, int ppoints, TResultats & presultats) {

    if(pfait==true) {
        presultats.resultatPreneur = ppoints*3;
        presultats.resultatDefense = -ppoints;
    }
    else {
        presultats.resultatPreneur = -ppoints*3;
        presultats.resultatDefense = ppoints;
    }
}

void affectation5(bool pfait, int ppoints, TResultats & presultats) {

    if(pfait == true) {
        presultats.resultatPreneur = ppoints*2;
        presultats.resultatDefense = -ppoints;
        presultats.resultatAppelle = ppoints;
    }
    else {
        presultats.resultatPreneur = -ppoints*2;
        presultats.resultatDefense = ppoints;
        presultats.resultatAppelle = -ppoints;
    }
}

void inverser(QVector<Carte*> *pV) {
    int indA = qrand() % K_NBCARTE;
    int indB = qrand() % K_NBCARTE;

    Carte *tmp = pV->at(indA);
    pV->replace(indA, pV->at(indB));
    pV->replace(indB, tmp);
}
